Memcached
---------------------------------Memcached----------------------------------------
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,
从而提高动态、数据库驱动网站的速度.
缓存一般用来保存一些常用存取的对象或数据,通过缓存来存取对象或数据要比磁盘存取快.把经常需要存取的对象或数据缓存在内存中,内存中缓存
的这些数据通过API的方式被存取.
Memcached 特征
1.协议简单
其使用基于文本行的协议,能直接通过telnet在Memcached服务器上存取数据.
2.基于libevent的事件处理
libevent利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成为一个接口,确保即使服务器端的链接数增加也能发挥很好的性能.
Memcached利用这个库进行异步事件处理.
3.内置的内存管理方式
有一套自己管理内存的方式,这套方式非常高效,所有的数据都保存在Memcached内置的内存中,当存入的数据占满空间时,使用LRU算法自动删除不使用的缓存,即重用过期的内存间.
Memecached不考虑数据的容灾问题,一旦重启所有数据全部丢失.
4.互不通信的分布式
Memecached服务器之间互不通信,都是独立的存取数据,不共享任何信息。通过对客户端的设计,让Memcached具有分布式,能支持海量缓存和大规模应用.
Memcached 环境建立
1.yum install memcached -y [安装Memcached]
2.#systemctl start memcached[启动服务]
#systemctl enable memcached
Memcached启动参数说明
-p:监听的TCP端口(默认:11211)
-U:监听的UDP端口(默认:11211,0表示不监听)
-s:用于监听的UNIX套接字路径(禁用网络支持)
-a:UNIX套接字访问掩码,八进制数字(默认:0700)
-l:监听的IP地址(默认:INADDR_ANY,所有地址)
-d:作为守护进程来运行
-r:最大核心文件限制
-u:设定进程所属用户(只有root用户可以使用这个参数)
-m:单个数据项的最大可用内存,以MB为单位.(默认:64MB )
-M:内存用光时报错.(不会删除数据)
-c:最大并发连接数.(默认:1024)
-v:提示信息(在事件循环中打印错误/警告信息)
-vv:详细信息(还打印客户端命令/响应)
-vvv:超详细信息(还打印内部状态的变化)
-k:锁定所有内存页。注意你可以锁定的内存上限.试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限.不是前面的
-u参数;在sh下,使用命令"ulimit -S -lNUM_KB"来设置)
-h:打印这个帮助信息并退出;
-i:打印memcached和libevent的许可;
-P:保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义;
-f:块大小增长因子;(默认:1.25 )
-n :分配给key+value+flags的最小空间(默认:48)
-L:尝试使用大内存页(如果可用的话),提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提高运行效率; 为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块;
-D:使用x作为前缀和ID的分隔符;这个用于按前缀获得状态报告。默认是":"(冒号);如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启.
-t:使用的线程数(默认:4 )
-R:每个连接可处理的最大请求数;
-C :禁用CAS
-b:设置后台日志队列的长度(默认:1024)
-B:绑定协议 - 可能值:ascii,binary,auto(默认)
-I:重写每个数据页尺寸;调整数据项最大尺寸;
4. 示例
//*启动memecached守护进程(-d),分配Memecached内存使用量为256M,以root身份运行(-u),监听端口为11211,接收最大并发连接数为1024个(-c),pid文件位置为/tmp目录下(-P)
#memcached -d -m 256 -u root -p 11211 -c 1024 -P /tmp/memcached.pid
5.查看Memcached状态
#telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
stats ←输入命令
STAT pid 4354←memcache服务器的进程ID
STAT uptime 1629←服务器已经运行的秒数
STAT time 1477994282←服务器当前的unix时间戳
STAT version 1.4.15←memcache版本
STAT libevent 2.0.21-stable←libevent版本
STAT pointer_size 64←当前操作系统的指针大小(32位系统一般是32bit,64就是64位操作系统)
STAT rusage_user 0.059374←进程的累计用户时间
STAT rusage_system 0.075867←进程的累计系统时间
STAT curr_connections 10←服务器当前存储的items数量
STAT total_connections 11←从服务器启动以后存储的items总数量
STAT connection_structures 11←服务器分配的连接构造数
STAT reserved_fds 20
STAT cmd_get 0←get命令(获取)总请求次数
STAT cmd_set 0←get命令(保存)总请求次数
STAT cmd_flush 0←flush命令请求次数
STAT cmd_touch 0←touch命令请求次数
STAT get_hits 0←总命中次数
STAT get_misses 0←总未命中次数
STAT delete_misses 0←delete命令未命中次数
STAT delete_hits 0←delete命令命中次数
STAT incr_misses 0←incr命令未命中次数
STAT incr_hits 0←incr命令命中次数
STAT decr_misses 0←decr命令未命中次数
STAT decr_hits 0←decr命令命中次数
STAT cas_misses 0←cas命令未命中次数
STAT cas_hits 0←cas命令命中次数
STAT cas_badval 0←使用擦拭次数
STAT touch_hits 0←touch命令未命中次数
STAT touch_misses 0←touch命令命中次数
STAT auth_cmds 0←认证命令处理的次数
STAT auth_errors 0←认证失败数目
STAT bytes_read 13←总读取字节数(请求字节数)
STAT limit_maxbytes 10485760 ←分配给memcache的内存大小(字节)
STAT accepting_conns 1←服务器是否达到过最大连接( 0/1)
STAT listen_disabled_num 0←失效的监听数
STAT threads 4←当前线程数
STAT conn_yields 0←连接操作主动放弃数目
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 0←当前存储占用的字节数
STAT curr_items 0←当前存储的数据总数
STAT total_items 0←启动以来存储的数据总数
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0←为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
STAT reclaimed 0←已过期的数据条目来存储新数据的数目
STAT crawler_reclaimed 0
STAT lrutail_reflocked 0
END
quit→退出
Memcached 的PHP 扩展
1.#yum install httpd php php-mbstring php-pear libmemcached -y[安装软件]
#yum install php-pecl-memcache.x86_64[需要此软件包才会有memcached.ini文件]
2.确认memcached模块已被扩展
#vi /etc/php.d/memcached.ini
//*确认第2行
extension = memcached.so
3.编辑index.php
#cd /var/www/html
#vi index.php
<?php phpinfo() ?>
4.启动apache
#systemctl restart httpd
5.打开浏览器查看php信息,在页面中找”memcached”,如果存在则证明扩展成功